{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Multi-Chain HMC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import torch\n",
    "import torch.utils.data\n",
    "from torch import nn\n",
    "from torch.nn import functional as F\n",
    "\n",
    "# from visualization import plot_predictive\n",
    "import seaborn as sns\n",
    "\n",
    "# import subspace_inference.utils as utils\n",
    "# from subspace_inference.posteriors import SWAG\n",
    "# from subspace_inference import models, losses, utils\n",
    "# from subspace_inference.models import MLP\n",
    "from swag import data, models, utils, losses\n",
    "from swag.posteriors import SWAG\n",
    "\n",
    "\n",
    "from tqdm import tqdm\n",
    "\n",
    "import os\n",
    "\n",
    "torch.backends.cudnn.benchmark = True\n",
    "torch.manual_seed(1)\n",
    "torch.cuda.manual_seed(1)\n",
    "np.random.seed(1)\n",
    "\n",
    "import hamiltorch\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def featurize(x):\n",
    "    return torch.cat([x[:, None], x[:, None]**2], dim=1)\n",
    "\n",
    "class RegNet(nn.Sequential):\n",
    "    def __init__(self, dimensions, input_dim=1, output_dim=1, apply_var=True):\n",
    "        super(RegNet, self).__init__()\n",
    "        self.dimensions = [input_dim, *dimensions, output_dim]        \n",
    "        for i in range(len(self.dimensions) - 1):\n",
    "            self.add_module('linear%d' % i, torch.nn.Linear(self.dimensions[i], self.dimensions[i + 1]))\n",
    "            if i < len(self.dimensions) - 2:\n",
    "                self.add_module('relu%d' % i, torch.nn.ReLU())\n",
    "\n",
    "        if output_dim == 2:\n",
    "            self.add_module('var_split', SplitDim(correction=apply_var))\n",
    "\n",
    "#     def forward(self, x):\n",
    "#         return super().forward(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "arr = np.load(\"data.npz\") \n",
    "x = torch.from_numpy(arr['x'])\n",
    "f = featurize(x)\n",
    "y = torch.from_numpy(arr['y']) * 10\n",
    "\n",
    "x_ = torch.from_numpy(arr['x_'])\n",
    "f_ = featurize(x_)\n",
    "y_ = torch.from_numpy(arr['y_']) * 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f53c51a7710>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
    "plt.plot(x_.data.numpy(), y_.data.numpy(), \"-b\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hypers\n",
    "\n",
    "Noise Variance: $0.0005$\n",
    "Prior Variance: $100$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 59.06       \n",
      "Acceptance Rate 0.78\n",
      "1\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.04       \n",
      "Acceptance Rate 0.83\n",
      "2\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.85       \n",
      "Acceptance Rate 0.87\n",
      "3\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.02       \n",
      "Acceptance Rate 0.78\n",
      "4\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.00       \n",
      "Acceptance Rate 0.88\n",
      "5\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.55       \n",
      "Acceptance Rate 0.71\n",
      "6\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 59.19       \n",
      "Acceptance Rate 0.88\n",
      "7\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.01       \n",
      "Acceptance Rate 0.85\n",
      "8\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.68       \n",
      "Acceptance Rate 0.81\n",
      "9\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.14       \n",
      "Acceptance Rate 0.82\n",
      "10\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.52       \n",
      "Acceptance Rate 0.53\n",
      "11\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 56.96       \n",
      "Acceptance Rate 0.78\n",
      "12\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.02       \n",
      "Acceptance Rate 0.81\n",
      "13\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.86       \n",
      "Acceptance Rate 0.71\n",
      "14\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.37       \n",
      "Acceptance Rate 0.86\n",
      "15\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 62.18       \n",
      "Acceptance Rate 0.80\n",
      "16\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.29       \n",
      "Acceptance Rate 0.85\n",
      "17\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.31       \n",
      "Acceptance Rate 0.67\n",
      "18\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.43       \n",
      "Acceptance Rate 0.78\n",
      "19\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.37       \n",
      "Acceptance Rate 0.82\n",
      "20\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 61.39       \n",
      "Acceptance Rate 0.81\n",
      "21\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.35       \n",
      "Acceptance Rate 0.85\n",
      "22\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.50       \n",
      "Acceptance Rate 0.79\n",
      "23\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.48       \n",
      "Acceptance Rate 0.86\n",
      "24\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.42       \n",
      "Acceptance Rate 0.72\n",
      "25\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.37       \n",
      "Acceptance Rate 0.78\n",
      "26\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.15       \n",
      "Acceptance Rate 0.74\n",
      "27\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.91       \n",
      "Acceptance Rate 0.73\n",
      "28\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.57       \n",
      "Acceptance Rate 0.86\n",
      "29\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.13       \n",
      "Acceptance Rate 0.57\n",
      "30\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.25       \n",
      "Acceptance Rate 0.91\n",
      "31\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.19       \n",
      "Acceptance Rate 0.71\n",
      "32\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.20       \n",
      "Acceptance Rate 0.74\n",
      "33\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.20       \n",
      "Acceptance Rate 0.85\n",
      "34\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.08       \n",
      "Acceptance Rate 0.80\n",
      "35\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 56.95       \n",
      "Acceptance Rate 0.59\n",
      "36\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.35       \n",
      "Acceptance Rate 0.85\n",
      "37\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.32       \n",
      "Acceptance Rate 0.74\n",
      "38\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.26       \n",
      "Acceptance Rate 0.67\n",
      "39\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.47       \n",
      "Acceptance Rate 0.74\n",
      "40\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.59       \n",
      "Acceptance Rate 0.74\n",
      "41\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.15       \n",
      "Acceptance Rate 0.57\n",
      "42\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.08       \n",
      "Acceptance Rate 0.89\n",
      "43\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.65       \n",
      "Acceptance Rate 0.79\n",
      "44\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.72       \n",
      "Acceptance Rate 0.79\n",
      "45\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.64       \n",
      "Acceptance Rate 0.70\n",
      "46\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.72       \n",
      "Acceptance Rate 0.83\n",
      "47\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.70       \n",
      "Acceptance Rate 0.84\n",
      "48\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.66       \n",
      "Acceptance Rate 0.69\n",
      "49\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.84       \n",
      "Acceptance Rate 0.94\n",
      "50\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.63       \n",
      "Acceptance Rate 0.74\n",
      "51\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.70       \n",
      "Acceptance Rate 0.70\n",
      "52\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.27       \n",
      "Acceptance Rate 0.81\n",
      "53\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.98       \n",
      "Acceptance Rate 0.72\n",
      "54\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.69       \n",
      "Acceptance Rate 0.65\n",
      "55\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.87       \n",
      "Acceptance Rate 0.68\n",
      "56\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.42       \n",
      "Acceptance Rate 0.77\n",
      "57\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.14       \n",
      "Acceptance Rate 0.88\n",
      "58\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.86       \n",
      "Acceptance Rate 0.79\n",
      "59\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.09       \n",
      "Acceptance Rate 0.84\n",
      "60\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.20       \n",
      "Acceptance Rate 0.82\n",
      "61\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.34       \n",
      "Acceptance Rate 0.85\n",
      "62\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.33       \n",
      "Acceptance Rate 0.92\n",
      "63\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.74       \n",
      "Acceptance Rate 0.89\n",
      "64\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.43       \n",
      "Acceptance Rate 0.74\n",
      "65\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 56.94       \n",
      "Acceptance Rate 0.84\n",
      "66\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.05       \n",
      "Acceptance Rate 0.92\n",
      "67\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 56.98       \n",
      "Acceptance Rate 0.78\n",
      "68\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.40       \n",
      "Acceptance Rate 0.68\n",
      "69\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.59       \n",
      "Acceptance Rate 0.83\n",
      "70\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 59.64       \n",
      "Acceptance Rate 0.80\n",
      "71\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 60.35       \n",
      "Acceptance Rate 0.80\n",
      "72\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 60.64       \n",
      "Acceptance Rate 0.90\n",
      "73\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 60.68       \n",
      "Acceptance Rate 0.77\n",
      "74\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 60.71       \n",
      "Acceptance Rate 0.82\n",
      "75\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.98       \n",
      "Acceptance Rate 0.91\n",
      "76\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.78       \n",
      "Acceptance Rate 0.83\n",
      "77\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.19       \n",
      "Acceptance Rate 0.83\n",
      "78\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.07       \n",
      "Acceptance Rate 0.89\n",
      "79\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.12       \n",
      "Acceptance Rate 0.85\n",
      "80\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.87       \n",
      "Acceptance Rate 0.81\n",
      "81\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.27       \n",
      "Acceptance Rate 0.78\n",
      "82\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.36       \n",
      "Acceptance Rate 0.80\n",
      "83\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.17       \n",
      "Acceptance Rate 0.80\n",
      "84\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.44       \n",
      "Acceptance Rate 0.80\n",
      "85\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.65       \n",
      "Acceptance Rate 0.91\n",
      "86\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.79       \n",
      "Acceptance Rate 0.81\n",
      "87\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.23       \n",
      "Acceptance Rate 0.72\n",
      "88\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.33       \n",
      "Acceptance Rate 0.80\n",
      "89\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.04       \n",
      "Acceptance Rate 0.81\n",
      "90\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.74       \n",
      "Acceptance Rate 0.82\n",
      "91\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.84       \n",
      "Acceptance Rate 0.84\n",
      "92\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.18       \n",
      "Acceptance Rate 0.74\n",
      "93\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.20       \n",
      "Acceptance Rate 0.76\n",
      "94\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.27       \n",
      "Acceptance Rate 0.89\n",
      "95\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.82       \n",
      "Acceptance Rate 0.85\n",
      "96\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.96       \n",
      "Acceptance Rate 0.78\n",
      "97\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.65       \n",
      "Acceptance Rate 0.72\n",
      "98\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.34       \n",
      "Acceptance Rate 0.83\n",
      "99\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 59.33       \n",
      "Acceptance Rate 0.89\n",
      "100\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.00       \n",
      "Acceptance Rate 0.82\n",
      "101\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.69       \n",
      "Acceptance Rate 0.84\n",
      "102\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.64       \n",
      "Acceptance Rate 0.83\n",
      "103\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.66       \n",
      "Acceptance Rate 0.81\n",
      "104\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.64       \n",
      "Acceptance Rate 0.65\n",
      "105\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.39       \n",
      "Acceptance Rate 0.82\n",
      "106\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.95       \n",
      "Acceptance Rate 0.84\n",
      "107\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.21       \n",
      "Acceptance Rate 0.84\n",
      "108\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.29       \n",
      "Acceptance Rate 0.80\n",
      "109\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.21       \n",
      "Acceptance Rate 0.52\n",
      "110\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.35       \n",
      "Acceptance Rate 0.79\n",
      "111\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.34       \n",
      "Acceptance Rate 0.78\n",
      "112\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.27       \n",
      "Acceptance Rate 0.82\n",
      "113\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.33       \n",
      "Acceptance Rate 0.85\n",
      "114\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.27       \n",
      "Acceptance Rate 0.78\n",
      "115\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.27       \n",
      "Acceptance Rate 0.77\n",
      "116\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.29       \n",
      "Acceptance Rate 0.83\n",
      "117\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.24       \n",
      "Acceptance Rate 0.81\n",
      "118\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.29       \n",
      "Acceptance Rate 0.73\n",
      "119\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.28       \n",
      "Acceptance Rate 0.72\n",
      "120\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.31       \n",
      "Acceptance Rate 0.77\n",
      "121\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.02       \n",
      "Acceptance Rate 0.88\n",
      "122\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.61       \n",
      "Acceptance Rate 0.79\n",
      "123\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.62       \n",
      "Acceptance Rate 0.67\n",
      "124\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.66       \n",
      "Acceptance Rate 0.75\n",
      "125\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.15       \n",
      "Acceptance Rate 0.93\n",
      "126\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.38       \n",
      "Acceptance Rate 0.73\n",
      "127\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.60       \n",
      "Acceptance Rate 0.65\n",
      "128\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.46       \n",
      "Acceptance Rate 0.94\n",
      "129\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.55       \n",
      "Acceptance Rate 0.84\n",
      "130\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.56       \n",
      "Acceptance Rate 0.73\n",
      "131\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.01       \n",
      "Acceptance Rate 0.82\n",
      "132\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.35       \n",
      "Acceptance Rate 0.80\n",
      "133\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.23       \n",
      "Acceptance Rate 0.78\n",
      "134\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.85       \n",
      "Acceptance Rate 0.80\n",
      "135\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.36       \n",
      "Acceptance Rate 0.88\n",
      "136\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.33       \n",
      "Acceptance Rate 0.68\n",
      "137\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.93       \n",
      "Acceptance Rate 0.59\n",
      "138\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.11       \n",
      "Acceptance Rate 0.80\n",
      "139\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.33       \n",
      "Acceptance Rate 0.72\n",
      "140\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.36       \n",
      "Acceptance Rate 0.86\n",
      "141\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.65       \n",
      "Acceptance Rate 0.74\n",
      "142\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.11       \n",
      "Acceptance Rate 0.83\n",
      "143\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.14       \n",
      "Acceptance Rate 0.89\n",
      "144\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.17       \n",
      "Acceptance Rate 0.78\n",
      "145\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.48       \n",
      "Acceptance Rate 0.69\n",
      "146\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.11       \n",
      "Acceptance Rate 0.73\n",
      "147\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.32       \n",
      "Acceptance Rate 0.71\n",
      "148\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.41       \n",
      "Acceptance Rate 0.76\n",
      "149\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.45       \n",
      "Acceptance Rate 0.83\n",
      "150\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.38       \n",
      "Acceptance Rate 0.94\n",
      "151\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.39       \n",
      "Acceptance Rate 0.90\n",
      "152\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.41       \n",
      "Acceptance Rate 0.78\n",
      "153\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.37       \n",
      "Acceptance Rate 0.78\n",
      "154\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.49       \n",
      "Acceptance Rate 0.77\n",
      "155\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.15       \n",
      "Acceptance Rate 0.74\n",
      "156\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.39       \n",
      "Acceptance Rate 0.85\n",
      "157\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.38       \n",
      "Acceptance Rate 0.82\n",
      "158\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.42       \n",
      "Acceptance Rate 0.81\n",
      "159\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.17       \n",
      "Acceptance Rate 0.90\n",
      "160\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.31       \n",
      "Acceptance Rate 0.80\n",
      "161\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.48       \n",
      "Acceptance Rate 0.83\n",
      "162\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.21       \n",
      "Acceptance Rate 0.66\n",
      "163\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.55       \n",
      "Acceptance Rate 0.88\n",
      "164\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.93       \n",
      "Acceptance Rate 0.80\n",
      "165\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.87       \n",
      "Acceptance Rate 0.64\n",
      "166\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.01       \n",
      "Acceptance Rate 0.67\n",
      "167\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.03       \n",
      "Acceptance Rate 0.89\n",
      "168\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.42       \n",
      "Acceptance Rate 0.80\n",
      "169\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.43       \n",
      "Acceptance Rate 0.83\n",
      "170\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.04       \n",
      "Acceptance Rate 0.89\n",
      "171\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 56.77       \n",
      "Acceptance Rate 0.72\n",
      "172\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.29       \n",
      "Acceptance Rate 0.91\n",
      "173\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.45       \n",
      "Acceptance Rate 0.66\n",
      "174\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.54       \n",
      "Acceptance Rate 0.72\n",
      "175\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.95       \n",
      "Acceptance Rate 0.81\n",
      "176\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.25       \n",
      "Acceptance Rate 0.78\n",
      "177\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.34       \n",
      "Acceptance Rate 0.83\n",
      "178\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.31       \n",
      "Acceptance Rate 0.72\n",
      "179\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.86       \n",
      "Acceptance Rate 0.72\n",
      "180\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.97       \n",
      "Acceptance Rate 0.68\n",
      "181\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.90       \n",
      "Acceptance Rate 0.89\n",
      "182\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.93       \n",
      "Acceptance Rate 0.85\n",
      "183\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.74       \n",
      "Acceptance Rate 0.82\n",
      "184\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.28       \n",
      "Acceptance Rate 0.75\n",
      "185\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.40       \n",
      "Acceptance Rate 0.79\n",
      "186\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.53       \n",
      "Acceptance Rate 0.86\n",
      "187\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.95       \n",
      "Acceptance Rate 0.73\n",
      "188\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.83       \n",
      "Acceptance Rate 0.88\n",
      "189\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.06       \n",
      "Acceptance Rate 0.80\n",
      "190\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.11       \n",
      "Acceptance Rate 0.82\n",
      "191\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.67       \n",
      "Acceptance Rate 0.82\n",
      "192\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.21       \n",
      "Acceptance Rate 0.84\n",
      "193\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.55       \n",
      "Acceptance Rate 0.88\n",
      "194\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.45       \n",
      "Acceptance Rate 0.81\n",
      "195\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 51.30       \n",
      "Acceptance Rate 0.91\n",
      "196\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.66       \n",
      "Acceptance Rate 0.59\n",
      "197\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.09       \n",
      "Acceptance Rate 0.77\n",
      "198\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 58.08       \n",
      "Acceptance Rate 0.93\n",
      "199\n",
      "Sampling (Sampler.HMC; Integrator.IMPLICIT)\n",
      "Time spent  | Time remain.| Progress             | Samples | Samples/sec\n",
      "0d:00:00:03 | 0d:00:00:00 | #################### | 200/200 | 57.83       \n",
      "Acceptance Rate 0.83\n"
     ]
    }
   ],
   "source": [
    "n_chains = 200\n",
    "n_samples_per_chain = 200\n",
    "\n",
    "noise_var = 0.0005\n",
    "prior_var = 100\n",
    "pretrain_steps = 3000\n",
    "    \n",
    "step_size = 0.001\n",
    "num_steps_per_sample = 10\n",
    "tau_out = 1 / noise_var\n",
    "tau_list = []\n",
    "tau = 1 / prior_var\n",
    "for w in net.parameters():\n",
    "    tau_list.append(tau)\n",
    "tau_list = torch.tensor(tau_list)\n",
    "\n",
    "criterion = torch.nn.functional.mse_loss\n",
    "\n",
    "all_preds_list = []\n",
    "\n",
    "for i in range(n_chains):\n",
    "    print(i)\n",
    "    \n",
    "    # Pre-Training for better burnin\n",
    "    net = RegNet(dimensions=[10, 10, 10], input_dim=2)\n",
    "    optimizer = torch.optim.SGD(net.parameters(), lr=5e-6)\n",
    "    for epoch in range(pretrain_steps):\n",
    "        optimizer.zero_grad()\n",
    "        preds = net(f)\n",
    "        loss = criterion(preds, y) / (2 * noise_var)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "    net.loss = 'regression'\n",
    "    \n",
    "    params_init = hamiltorch.util.flatten(net).clone()\n",
    "    params_hmc = hamiltorch.sample_model(net, f, y, model_loss='regression', params_init=params_init, \n",
    "                                         num_samples=n_samples_per_chain, step_size=step_size, \n",
    "                                         num_steps_per_sample=num_steps_per_sample, tau_out=tau_out,\n",
    "                                         tau_list=tau_list\n",
    "                                        )\n",
    "    \n",
    "    pred_list, log_prob_list = hamiltorch.predict_model(net, f_, y_, samples=params_hmc, model_loss='regression', \n",
    "                                                    tau_out=1., tau_list=tau_list)\n",
    "\n",
    "    all_preds_list.append(pred_list)\n",
    "    \n",
    "all_preds_list = np.vstack(all_preds_list)\n",
    "np.save(\"hmc_ensembles_preds\", all_preds_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f52a2b21610>]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# all_preds = np.vstack([np.load(\"preds2_{}.npy\".format(i)) for i in range(n_chains)])\n",
    "all_preds = np.load(\"hmc_ensembles_preds.npy\")\n",
    "\n",
    "pred_mean = all_preds.mean(axis=0)\n",
    "pred_std = all_preds.std(axis=0)\n",
    "pred_upper = pred_mean + pred_std\n",
    "pred_lower = pred_mean - pred_std\n",
    "\n",
    "# plt.plot(x_ , all_preds[0, :, 0], '--k');\n",
    "plt.plot(x_ , all_preds[::100, :, 0].T, '-b',alpha=0.01);\n",
    "plt.plot(x.data.numpy(), y.data.numpy(), \"ro\")\n",
    "# plt.plot(x_.data.numpy(), y_.data.numpy(), \"--b\")\n",
    "plt.plot(x_.data.numpy(), pred_mean, \"-g\", lw=5)\n",
    "plt.plot(x_.data.numpy(), pred_lower, \"-g\", lw=2)\n",
    "plt.plot(x_.data.numpy(), pred_upper, \"-g\", lw=2)\n",
    "# plt.ylim(-0.2, 0.4)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py37",
   "language": "python",
   "name": "py37"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
